📅 2023. 10. 22
FECONF 2023 이벤트 기반 웹뷰 프레임워크 설계와 플러그인 생태계 만들기 영상의 내용을 정리한 글입니다.
발표자: 원지혁 (당근마켓)
const state = aggregate(events, currentTime)
로 표현 가능
currentTime
은 애니메이션 상태가 현재 시간에 받게 되어서 추가한 인자Init
이벤트: 스택이 초기화 될 때 필요한 이벤트Pushed
이벤트: 화면이 새 화면으로 덮어지는 이벤트Popped
이벤트: 화면이 이전 화면으로 빠지는 이벤트dispatch()
라는 이름으로 Event를 추가하는 함수를 작성aggregate()
함수가 작동해 상태를 계산getState()
함수와 상태가 변경될 때마다 콜백을 호출해주는 subscribe()
인터페이스를 노출useSyncExternalStore()
API를 통해 React 내부 상태와 동기화produceEffect()
추가Option
으로 넘기던 것을 Array<Option>
으로 변경하기historySyncPlugin()
devToolsPlugin()
renderToString
이나 renderToPipeableStream
모두 사용이 가능합니다. 저희가 해야 할 일은 다음 페이지로 전환될 때 다음 페이지에 대한 데이터 의존성에 대해 prefetch와 같은 동작을 구현하는 일입니다. 저희가 원하는 Next.js의 기능은 어떤 화면이든 다음 화면에 대해 getServerSideProps
를 호출하면 결과값을 바로 받아올 수 있는 API였는데, Next.js 소스코드를 찾아보니 해당 API가 없더라구요. 그래서 Next.js 코드를 어떻게든 짜집기해서 통합을 해놓은 예제를 만들었어요. 그런데 공식 기능이 아니라서 버전이 올라가면 작동이 안 될 수도 있으니, 추천하지 않는다고 README에 적었던거거든요. Next.js가 아닌 Vite SSR이나 직접 SSR을 구현하시면 통합할 수 있을거고, 커뮤니티에서도 그렇게 사용하고 있습니다.useSyncExternalStore()
API를 사용하셨다고 했는데, Solid나 Vue같은 다른 프레임워크에서도 사용이 가능한건지 궁금합니다.